<?php
/**
 * Order
 *
 * Класс для обработки раздела Order
 *
 * @author Дмитрий Кузьма <kouzma.d@gmail.ru>
 * @version 1.0
 */
class Order extends ActiveRecord {
	public $tableName = 'order';
	public $pkName = 'ID_order';

	protected $essenceType = 32;

	protected $arrWysiwyg = array('text');
	protected $arrSettings = array('created_at' => true,  // в БД храним вмеря создания
																'updated_at' => true, 	// в БД храним вмеря редактирования
																'author' => true);			// в БД храним автора (ID_user)

  public function __construct($arrInitialFields = null) {
		parent::__construct($arrInitialFields);
  }

  /**
   * Изменение полей перед сохранением
   *
   */
  public function beforeSave() {
  }

  /**
   * Настройка проверок перед валидацией
   * Удаляем <br> из вайсвига, если больше ничего нет
   *
   */
  public function beforeValidation() {
    //$this->tableFields['text'];
    if (trim($this->getField('text')) == '<br>') $this->setField('text', '');
  }
  
 /* public function addOrder() {
    $objDB = Service_Database::instance();//Получаем подключение к БД
    $stmt = "INSERT INTO `order` (`ID_user`, `ID_order`, `order_type`) VALUES ('102', '".$id_order."', '".$order_type."');";
    $objDB->query($stmt);
  }
 */
  
  /**
   * Проверка результатов оплаты заказа
   *
   */
  public static function checkSuccess() {
   
    // Функция, которая возвращает результат в Единую кассу
    function print_answer($result, $description)
    {
      
      $retStr =  "WMI_RESULT=" . strtoupper($result) . "&";
      $retStr .= "WMI_DESCRIPTION=" .($description);
      return $retStr;
    }
    
    // Проверка наличия необходимых параметров в POST-запросе
    if (!isset($_POST["WMI_SIGNATURE"]))
      return print_answer("Retry", "Отсутствует параметр WMI_SIGNATURE");
    
    if (!isset($_POST["WMI_PAYMENT_NO"]))
      return print_answer("Retry", "Отсутствует параметр WMI_PAYMENT_NO");
    
    if (!isset($_POST["WMI_ORDER_STATE"]))
      return print_answer("Retry", "Отсутствует параметр WMI_ORDER_STATE");
    
    // Извлечение всех параметров POST-запроса, кроме WMI_SIGNATURE
    
    foreach($_POST as $name => $value)
    {
      if ($name !== "WMI_SIGNATURE") $params[$name] = $value;
    }
   //echo '<pre>';
     //print_r($params);
   //echo '</pre>';
   //echo $_POST["WMI_SIGNATURE"];
   //echo '<br />';
    // Сортировка массива по именам ключей в порядке возрастания
    // и формирование сообщения, путем объединения значений формы
    
    uksort($params, "strcasecmp"); $values = "";
    
    foreach($params as $name => $value)
    {
      $values .= $params[$name];
    }
    
    // Формирование подписи для сравнения ее с параметром WMI_SIGNATURE
    
    $signature = base64_encode(pack("H*", md5($values . SECRET_KEY)));
    //Сравнение полученной подписи с подписью W1
    
    if (true || $signature == $_POST["WMI_SIGNATURE"])
    {
      if (strtoupper($_POST["WMI_ORDER_STATE"]) == "ACCEPTED")
      {
        // TODO: Пометить заказ, как «Оплаченный» в системе учета магазина
        // А у нас создать заказ в БД
        // new Order();
        // $obj->setField()
        // ...
        // $obj->setField()
        // ->save
        $objOrder = new Order();
        $objDB = Service_Database::instance();//Получаем подключение к БД
        $stmt = "INSERT INTO `order` (`ID_user`, `ID_order`, `order_type`, `date_order`) VALUES ('".$objOrder->getField('ID_user')."', \"{$_POST["WMI_PAYMENT_NO"]}\",\"{$_POST["WMI_PAYMENT_AMOUNT"]}\", \"{$_POST["WMI_EXPIRED_DATE"]}\");";
        $objDB->query($stmt);
        
        //$objOrder = new Order();
        //$id_order = Service_Function::absolutelyEscapeString($_POST["WMI_PAYMENT_NO"]);
        //$order_type = Service_Function::absolutelyEscapeString($_POST["WMI_PAYMENT_AMOUNT"]);
        //Order::addOrder($id_order, $order_type);
        
        //print_answer("Ok", "Заказ #" . $_POST["WMI_PAYMENT_NO"] . " оплачен!");
        return true;
      }
      else if (strtoupper($_POST["WMI_ORDER_STATE"]) == "PROCESSING")
      {
        // TODO: Пометить заказ, как «Оплаченный» в системе учета магазина
    
        print_answer("Ok", "Заказ #" . $_POST["WMI_PAYMENT_NO"] . " оплачен!");
        return true;
    
        // Данная ситуация возникает, если в платежной форме WMI_AUTO_ACCEPT=0.
        // В этом случае интернет-магазин может принять оплату или отменить ее.
      }
      else if (strtoupper($_POST["WMI_ORDER_STATE"]) == "REJECTED")
      {
        // TODO: Пометить заказ, как «Неоплаченный» в системе учета магазина
    
        return print_answer("Ok", "Заказ #" . $_POST["WMI_PAYMENT_NO"] . " отменен!");
      }
      else
      {
    	// Случилось что-то странное, пришло неизвестное состояние заказа
    
        return print_answer("Retry", "Неверное состояние ". $_POST["WMI_ORDER_STATE"]);
      }
    }
    else
    {
      // Подпись не совпадает, возможно вы поменяли настройки интернет-магазина
    
      return print_answer("Retry", "Неверная подпись " . $_POST["WMI_SIGNATURE"]);
    }
  }
}
?>